{% extends 'base_dashboard.html' %} {% block title %}MCQ Bank — {{ program.title }}{% endblock %} {% block content %}

MCQ bank — {{ program.title }}

{{ program.active_question_count }} active in bank (minimum {{ program.min_question_bank }} required) · Each student gets a random {{ program.questions_per_exam }} MCQs {% if not program.is_exam_ready %} · Need {{ program.question_bank_deficit }} more MCQs before exams can run {% else %} · Bank ready {% endif %}

Back
{% if not program.is_exam_ready %}
Enter at least {{ program.min_question_bank }} MCQs. The system will randomly select {{ program.questions_per_exam }} different questions for every candidate attempt.
{% endif %} {# ── Bulk CSV upload ── #}
Bulk upload MCQs (CSV)

Download the sample file, fill in your questions and answers, then upload to import the whole bank at once.

Download sample CSV
{% csrf_token %}
{{ bulk_form.csv_file }} {% if bulk_form.csv_file.errors %}
{{ bulk_form.csv_file.errors.0 }}
{% endif %}
CSV columns: question, choice_a, choice_b, choice_c, choice_d, correct, order, is_active correct = A / B / C / D (required). Choice C/D, order, and is_active are optional.
Add single question
{% csrf_token %}
{{ form.text }}
{{ form.choice_a }}
{{ form.choice_b }}
{{ form.choice_c }}
{{ form.choice_d }}
{{ form.correct }}
{{ form.order }}
{{ form.is_active }}
Showing latest {{ questions|length }} questions (newest first for large banks).
{% for q in questions %}
#{{ q.order|default:q.pk }} · {{ q.text }}
    {% for c in q.choices.all %}
  • {% if c.is_correct %}✓ {% endif %}{{ c.text }}{% if c.is_correct %}{% endif %}
  • {% endfor %}
{% csrf_token %}
{% empty %}
No questions yet. Upload a CSV or add MCQs on the left.
{% endfor %}
{% endblock %}